class Solution:
    def isValid(self, s: str) -> bool:
        s = s.strip()
        while '{}' in s or '[]' in s or '()' in s:
            s= s.replace('{}','')
            s= s.replace('[]','')
            s= s.replace('()','')
        return s==''


# 最正经的栈的做法，配合哈希表
class Solution:
    def isValid(self, s: str) -> bool:
        dic = {')': '(', ']': '[', '}': '{'}
        # 值先进去，键再进去，键是闭括号，值是开括号
        # 当取出来的是开括号的时候，需要将其存入栈中，取出的闭括号的时候，才考虑判断是否是有效括号。
        stack = []
        for i in s:
            # 如果值是闭括号，且栈不为空，栈空的时候会报错
            if stack and i in dic:
                if stack[-1] == dic[i]:
                    stack.pop()
                else:
                    return False
            # 开括号直接存入栈中
            else:
                stack.append(i)
        return not stack

